package com.cskaoyan.bean;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class GenerateProxyInstance {
    public static void main(String[] args) {
        //增加一个设置 → 生成到working directory路径下
        //ProxyGenerator
        System.setProperty("sun.misc.ProxyGenerator.saveGeneratedFiles","true");

        WangDaiYi wangDaiYi = new WangDaiYi();
        //获得代理对象，现在没有代理类
        //匿名内部类
        //JDK动态代理的代理对象要用接口接收
        Interface1 proxy = (Interface1) Proxy.newProxyInstance(WangDaiYi.class.getClassLoader(),
                WangDaiYi.class.getInterfaces(),
                new InvocationHandler() {
            //InvocationHandler的invoke方法 → 代理对象执行的方法

            /**
             * @param proxy 代理对象
             * @param method 委托类要去执行的方法
             * @param args 委托类执行的方法所携带的参数
             */
            @Override
            public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                //委托类要执行的方法
                Object invoke = method.invoke(wangDaiYi, args);//反射
                //增强
                System.out.println("一根烤肠哈哈" + method.getName());
                return invoke;//也可以自定义处理返回值 → 代理对象方法的返回值
            }
        });
        proxy.buyBreakFast();
    }
}
